package com.hrzyit.whistle.cases.service

import com.hrzyit.base.data.protocol.ApiPageInfo
import com.hrzyit.whistle.cases.data.bean.*
//import rx.Observable
import io.reactivex.Observable


/**
 * 案件管理业务接口
 * @author YangWei
 * @date 2019/4/1
 */
interface ICaseCenterService {
    /**
     * 上报案件
     * @author YangWei
     * @date 2019/4/4
     * @param entity    CaseInfoEntity
     * @return true|false
     */
    fun caseApply(entity: CaseInfoEntity): Observable<MutableMap<String, Any>>

    /**
     * 获取指定案件类型数据列表
     * @author YangWei
     * @date 2019/4/8
     * @param caseType      案件数据类型：=0，所有
     * @param currentPage   分页：当前页码，默认值 1 {@link BaseConstant.PAGE_CURRENT_DEFAULT}
     * @param pageSize      分页：每页最大记录数，默认值：8 {@link BaseConstant.PAGE_SIZE_DEFAULT}
     * @return 指定案件类型数据列表
     */
    fun selectCaseListByCaseType(
        caseType: Int,
        currentPage: Int,
        pageSize: Int
    ): Observable<ApiPageInfo<CaseInfoEntity>>

    /**
     * 获取指定案件详情数据
     * @author YangWei
     * @date 2019/4/8
     * @param caseId    案件id
     * @return 指定案件详情数据
     */
    fun getCaseInfoById(caseId: Long): Observable<CaseDetailInfoEntity>

    /**
     * 签收或不签收(受理或不受理)指挥中心派发的案件（指挥中心->单位）
     * @author YangWei
     * @date 2019/4/17
     * @param caseSignInVo  @{link CaseSignInVo}
     * @return 成功(true)|失败(false)
     */
    fun signInCaseFromCenter(caseSignInVo: CaseSignInVo): Observable<Boolean>

    /**
     * 获取案件派遣人信息列表
     * @author YangWei
     * @date 2019/4/19
     * @param caseId   案件id
     * @param userId   操作人id
     * @return 案件派遣人信息列表 @{link CaseIndexUserInfoVo}
     */
    fun selectCaseDispatchUserList(caseId: Long, userId: Long): Observable<MutableList<CaseIndexUserInfoVo>>

    /**
     * 获取批转单位信息列表
     * @author YangWei
     * @date 2019/4/19
     * @param caseId   案件id
     * @param userId   操作人id
     * @return 批转单位信息列表 @{link CaseIndexDeptInfoVo}
     */
    fun selectCaseTransferDeptList(caseId: Long, userId: Long): Observable<MutableList<CaseIndexDeptInfoVo>>

    /**
     * 获取批转单位的人员信息列表
     * @author YangWei
     * @date 2019/5/08
     * @param caseId   案件id
     * @param userId   操作人id
     * @param deptId   批转到单位id
     * @return 批转单位的人员信息列表 @{link CaseIndexUserInfoVo}
     */
    fun selectCaseTransferUserList(
        caseId: Long,
        userId: Long,
        deptId: Long
    ): Observable<MutableList<CaseIndexUserInfoVo>>

    /**
     * 保存案件派遣人(处置人)信息
     * @author YangWei
     * @date 2019/4/20
     * @param caseId   案件id
     * @param userId   操作人id
     * @param disposeDeptId   处置单位id
     * @param disposeUserId   处置人id
     * @return 成功(true)|失败(false)
     */
    fun saveCaseDisposeUser(caseId: Long, userId: Long, disposeDeptId: Long, disposeUserId: Long): Observable<Boolean>

    /**
     *
     * @author YangWei
     * @date 2019/4/21
     * @return 成功(true)|失败(false)
     */
    fun saveCaseDisposeResult(saveDisposeCaseInfoVo: SaveDisposeCaseInfoVo): Observable<Boolean>

    /**
     *
     * @author YangWei
     * @date 2019/4/21
     * @return 成功(true)|失败(false)
     */
    fun applyCaseClose(caseApplyCloseVo: CaseApplyCloseVo): Observable<Boolean>

    /**
     * 保存批示信息
     * @author YangWei
     * @date 2019/4/28
     * @param authMsgEntity {@link AuthMsgEntity}
     * @return 成功(true)|失败(false)
     */
    fun saveAuthMsg(authMsgEntity: AuthMsgEntity): Observable<Boolean>

    /**
     * 获取案件批示详情
     * @author YangWei
     * @date 2019/4/28
     * @param caseId    案件id
     * @param userId    当前操作人id
     * @return authMsgEntityVo {@link AuthMsgEntityVo}
     */
    fun getCaseAuthInfo(caseId: Long, userId: Long): Observable<AuthMsgEntityVo>

    /**
     * 获取批示接收单位/人员列表
     * @author YangWei
     * @date 2019/4/29
     * @param caseId   案件id
     * @param userId   操作人id
     * @return 批示接收单位/人员列表 @{link SelectUserDeptInfoVo}
     */
    fun getDeptUserForApproveList(caseId: Long, userId: Long): Observable<MutableList<SelectUserDeptInfoVo>>

    /**
     * 签收或不签收(受理或不受理)单位批转的案件（单位->单位）
     * @author YangWei
     * @date 2019/4/19
     * @param caseSignInVo  {@link CaseSignInVo}
     * @return 成功(true)|失败(false)
     */
    fun signInCaseFromDept(caseSignInVo: CaseSignInVo): Observable<Boolean>

    /**
     * 保存批转信息(单位->单位)
     * @author YangWei
     * @date 2019/5/9
     * @param transferCaseToDeptVo {@link transferCaseToDeptVo}
     * @return 成功(true)|失败(false)
     */
    fun saveTransferCaseToDept(transferCaseToDeptVo: TransferCaseToDeptVo): Observable<Boolean>

    /**
     *
     * 获取案件进度情况数据
     * @author YangWei
     * @date 2019/5/9
     * @param caseId 案件id
     * @return MutableList<CaseInfoProcessVo> {@link CaseInfoProcessVo}
     */
    fun getCaseInfoProcessListByCaseId(caseId: Long): Observable<MutableList<CaseInfoProcessVo>>

    /**
     * 发起吹哨操作
     * @author YangWei
     * @date 2019/5/9
     * @param whistleCase {@link WhistleCaseVo}
     * @return 成功/失败(true/false)
     */
    fun applyCaseWhistle(whistleCase: WhistleCaseVo): Observable<Boolean>

}